package com.sen.common.orm;

import java.util.List;

/**
 * 统一的DAO层接口.
 * 
 * @author sen
 */
public interface PublicDao {

	/**
	 * 数据库的插入操作.
	 * 
	 * @param sqlMapId
	 *            sqlmap配置里的id信息.
	 * @param obj
	 *            要插入到数据库的对象信息.
	 * @return sql里返回的主键信息.
	 */
	Object insert(String sqlMapId, Object obj);
	
	/**
	 * 数据库批量操作.包括insert，update，delete操作
	 * 
	 * @param sqlMapId
	 *            sqlmap配置里的id信息.
	 * @param objs
	 *            参数列表.
	 * @return sql里返回的主键信息.
	 */
	Object batchExecute(final String sqlMapId, final List<Object> objs);

	/**
	 * 数据库的更新操作.
	 * 
	 * @param sqlMapId
	 *            sqlmap配置里的id信息.
	 * @param obj
	 *            要更新到数据库的对象信息.
	 * @return 数据库更新的记录数.
	 */
	int update(String sqlMapId, Object obj);

	/**
	 * 数据库的删除操作.
	 * 
	 * @param sqlMapId
	 *            sqlmap配置里的id信息.
	 * @return 数据库删除的记录数.
	 */
	int delete(String sqlMapId);

	/**
	 * 数据库的删除操作.
	 * 
	 * @param sqlMapId
	 *            sqlmap配置里的id信息.
	 * @param obj
	 *            要删除的对象信息.
	 * @return 数据库删除的记录数.
	 */
	int delete(String sqlMapId, Object obj);

	/**
	 * 根据条件进行查询, 并进行分页处理.
	 * 
	 * @param <T>
	 * @param sqlMapId
	 *            sqlmap配置里的id信息.
	 * @param param
	 *            查询条件.
	 * @param skip
	 *            分页的跳过记录数.
	 * @param max
	 *            分页返回的最大记录数.
	 * @return 查询到的记录信息.
	 */
	<T> List<T> query(String sqlMapId, Object param, int skip, int max);

	/**
	 * 完全依据SQL进行查询, 无动态查询条件.
	 * 
	 * @param <T>
	 * @param sqlMapId
	 *            sqlmap配置里的id信息.
	 * @return 查询到的记录信息.
	 */
	<T> List<T> query(String sqlMapId);

	/**
	 * 根据条件进行查询, 但不进行分页处理.
	 * 
	 * @param <T>
	 * @param sqlMapId
	 *            sqlmap配置里的id信息.
	 * @param param
	 *            查询条件.
	 * @return 查询到的记录信息.
	 */
	<T> List<T> query(String sqlMapId, Object param);

	/**
	 * 完全依据SQL进行查询, 无动态查询条件, 并返回单条记录信息.
	 * 
	 * @param <T>
	 * @param sqlMapId
	 *            sqlmap配置里的id信息.
	 * @return 查询到的记录信息.
	 */
	<T> T querySingle(String sqlMapId);

	/**
	 * 根据条件进行查询, 并返回单条记录信息.
	 * 
	 * @param <T>
	 * @param sqlMapId
	 *            sqlmap配置里的id信息.
	 * @return 查询到的记录信息.
	 */
	<T> T querySingle(String sqlMapId, Object param);
}
